using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._ImageAnalystTools._ChangeDetection
{
    /// <summary>
    /// <para>Detect Change Using Change Analysis Raster</para>
    /// <para>Generates a raster containing pixel change information using the output change analysis raster from the Analyze Changes Using CCDC tool or the Analyze Changes Using LandTrendr  tool.</para>
    /// <para>使用使用 CCDC 分析变化工具或使用 LandTrendr 分析变化工具的输出变化分析栅格生成包含像素变化信息的栅格。</para>
    /// </summary>    
    [DisplayName("Detect Change Using Change Analysis Raster")]
    public class DetectChangeUsingChangeAnalysisRaster : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public DetectChangeUsingChangeAnalysisRaster()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_in_change_analysis_raster">
        /// <para>Input Change Analysis Raster</para>
        /// <para>The change analysis raster generated from the Analyze Changes Using CCDC tool or the Analyze Changes Using LandTrendr tool.</para>
        /// <para>通过使用 CCDC 分析变化工具或使用 LandTrendr 分析变化工具生成的变化分析栅格。</para>
        /// </param>
        /// <param name="_out_raster">
        /// <para>Output Raster</para>
        /// <para>The output raster containing the detected change information.</para>
        /// <para>包含检测到的变化信息的输出栅格。</para>
        /// </param>
        /// <param name="_change_type">
        /// <para>Change Type</para>
        /// <para><xdoc>
        ///   <para>Specifies the change information that will be calculated for each pixel.</para>
        ///   <bulletList>
        ///     <bullet_item>Time of latest change—Each pixel will contain the date of its most recent change in the time series. This is the default.</bullet_item><para/>
        ///     <bullet_item>Time of earliest change—Each pixel will contain the date of its earliest change in the time series.</bullet_item><para/>
        ///     <bullet_item>Time of largest change—Each pixel will contain the date of its most significant change in the time series.</bullet_item><para/>
        ///     <bullet_item>Number of changes—Each pixel will contain the total number of times it changed in the time series.</bullet_item><para/>
        ///     <bullet_item>Time of longest change—Each pixel will contain the date of change at the beginning or end of the longest transition segment in the time series.</bullet_item><para/>
        ///     <bullet_item>Time of shortest change—Each pixel will contain the date of change at the beginning or end of the shortest transition segment in the time series.</bullet_item><para/>
        ///     <bullet_item>Time of fastest change—Each pixel will contain the date of change at the beginning or end of the transition that occurred most quickly.</bullet_item><para/>
        ///     <bullet_item>Time of slowest change—Each pixel will contain the date of change at the beginning or end of the transition that occurred most slowly.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定将为每个像素计算的更改信息。</para>
        ///   <bulletList>
        ///     <bullet_item>最新更改时间—每个像素将包含其在时间序列中最近更改的日期。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>最早更改时间—每个像素都将包含其在时间序列中最早更改的日期。</bullet_item><para/>
        ///     <bullet_item>最大变化时间—每个像素将包含其在时间序列中发生最显著变化的日期。</bullet_item><para/>
        ///     <bullet_item>更改次数 - 每个像素将包含其在时间序列中更改的总次数。</bullet_item><para/>
        ///     <bullet_item>最长更改时间—每个像素将包含时间序列中最长过渡段的开头或结尾处的更改日期。</bullet_item><para/>
        ///     <bullet_item>最短更改时间—每个像素将包含时间序列中最短过渡段的开头或结尾处的更改日期。</bullet_item><para/>
        ///     <bullet_item>最快更改时间 - 每个像素将包含最快发生的转换开始或结束时的更改日期。</bullet_item><para/>
        ///     <bullet_item>最慢更改时间 - 每个像素将包含最慢的过渡开始或结束时的更改日期。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// </param>
        public DetectChangeUsingChangeAnalysisRaster(object _in_change_analysis_raster, object _out_raster, _change_type_value _change_type)
        {
            this._in_change_analysis_raster = _in_change_analysis_raster;
            this._out_raster = _out_raster;
            this._change_type = _change_type;
        }
        public override string ToolboxName => "Image Analyst Tools";

        public override string ToolName => "Detect Change Using Change Analysis Raster";

        public override string CallName => "ia.DetectChangeUsingChangeAnalysisRaster";

        public override List<string> AcceptEnvironments => ["cellSize", "compression", "configKeyword", "extent", "geographicTransformations", "nodata", "outputCoordinateSystem", "parallelProcessingFactor", "rasterStatistics", "resamplingMethod", "scratchWorkspace", "snapRaster", "tileSize", "workspace"];

        public override object[] ParameterInfo => [_in_change_analysis_raster, _out_raster, _change_type.GetGPValue(), _max_number_changes, _segment_date.GetGPValue(), _change_direction.GetGPValue(), _filter_by_year.GetGPValue(), _min_year, _max_year, _filter_by_duration.GetGPValue(), _min_duration, _max_duration, _filter_by_magnitude.GetGPValue(), _min_magnitude, _max_magnitude, _filter_by_start_value.GetGPValue(), _min_start_value, _max_start_value, _filter_by_end_value.GetGPValue(), _min_end_value, _max_end_value];

        /// <summary>
        /// <para>Input Change Analysis Raster</para>
        /// <para>The change analysis raster generated from the Analyze Changes Using CCDC tool or the Analyze Changes Using LandTrendr tool.</para>
        /// <para>通过使用 CCDC 分析变化工具或使用 LandTrendr 分析变化工具生成的变化分析栅格。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Change Analysis Raster")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_change_analysis_raster { get; set; }


        /// <summary>
        /// <para>Output Raster</para>
        /// <para>The output raster containing the detected change information.</para>
        /// <para>包含检测到的变化信息的输出栅格。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output Raster")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _out_raster { get; set; }


        /// <summary>
        /// <para>Change Type</para>
        /// <para><xdoc>
        ///   <para>Specifies the change information that will be calculated for each pixel.</para>
        ///   <bulletList>
        ///     <bullet_item>Time of latest change—Each pixel will contain the date of its most recent change in the time series. This is the default.</bullet_item><para/>
        ///     <bullet_item>Time of earliest change—Each pixel will contain the date of its earliest change in the time series.</bullet_item><para/>
        ///     <bullet_item>Time of largest change—Each pixel will contain the date of its most significant change in the time series.</bullet_item><para/>
        ///     <bullet_item>Number of changes—Each pixel will contain the total number of times it changed in the time series.</bullet_item><para/>
        ///     <bullet_item>Time of longest change—Each pixel will contain the date of change at the beginning or end of the longest transition segment in the time series.</bullet_item><para/>
        ///     <bullet_item>Time of shortest change—Each pixel will contain the date of change at the beginning or end of the shortest transition segment in the time series.</bullet_item><para/>
        ///     <bullet_item>Time of fastest change—Each pixel will contain the date of change at the beginning or end of the transition that occurred most quickly.</bullet_item><para/>
        ///     <bullet_item>Time of slowest change—Each pixel will contain the date of change at the beginning or end of the transition that occurred most slowly.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定将为每个像素计算的更改信息。</para>
        ///   <bulletList>
        ///     <bullet_item>最新更改时间—每个像素将包含其在时间序列中最近更改的日期。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>最早更改时间—每个像素都将包含其在时间序列中最早更改的日期。</bullet_item><para/>
        ///     <bullet_item>最大变化时间—每个像素将包含其在时间序列中发生最显著变化的日期。</bullet_item><para/>
        ///     <bullet_item>更改次数 - 每个像素将包含其在时间序列中更改的总次数。</bullet_item><para/>
        ///     <bullet_item>最长更改时间—每个像素将包含时间序列中最长过渡段的开头或结尾处的更改日期。</bullet_item><para/>
        ///     <bullet_item>最短更改时间—每个像素将包含时间序列中最短过渡段的开头或结尾处的更改日期。</bullet_item><para/>
        ///     <bullet_item>最快更改时间 - 每个像素将包含最快发生的转换开始或结束时的更改日期。</bullet_item><para/>
        ///     <bullet_item>最慢更改时间 - 每个像素将包含最慢的过渡开始或结束时的更改日期。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Change Type")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public _change_type_value _change_type { get; set; }

        public enum _change_type_value
        {
            /// <summary>
            /// <para>Time of latest change</para>
            /// <para>Time of latest change—Each pixel will contain the date of its most recent change in the time series. This is the default.</para>
            /// <para>最新更改时间—每个像素将包含其在时间序列中最近更改的日期。这是默认设置。</para>
            /// </summary>
            [Description("Time of latest change")]
            [GPEnumValue("TIME_OF_LATEST_CHANGE")]
            _TIME_OF_LATEST_CHANGE,

            /// <summary>
            /// <para>Time of earliest change</para>
            /// <para>Time of earliest change—Each pixel will contain the date of its earliest change in the time series.</para>
            /// <para>最早更改时间—每个像素都将包含其在时间序列中最早更改的日期。</para>
            /// </summary>
            [Description("Time of earliest change")]
            [GPEnumValue("TIME_OF_EARLIEST_CHANGE")]
            _TIME_OF_EARLIEST_CHANGE,

            /// <summary>
            /// <para>Time of largest change</para>
            /// <para>Time of largest change—Each pixel will contain the date of its most significant change in the time series.</para>
            /// <para>最大变化时间—每个像素将包含其在时间序列中发生最显著变化的日期。</para>
            /// </summary>
            [Description("Time of largest change")]
            [GPEnumValue("TIME_OF_LARGEST_CHANGE")]
            _TIME_OF_LARGEST_CHANGE,

            /// <summary>
            /// <para>Number of changes</para>
            /// <para>Number of changes—Each pixel will contain the total number of times it changed in the time series.</para>
            /// <para>更改次数 - 每个像素将包含其在时间序列中更改的总次数。</para>
            /// </summary>
            [Description("Number of changes")]
            [GPEnumValue("NUM_OF_CHANGES")]
            _NUM_OF_CHANGES,

            /// <summary>
            /// <para>Time of longest change</para>
            /// <para>Time of longest change—Each pixel will contain the date of change at the beginning or end of the longest transition segment in the time series.</para>
            /// <para>最长更改时间—每个像素将包含时间序列中最长过渡段的开头或结尾处的更改日期。</para>
            /// </summary>
            [Description("Time of longest change")]
            [GPEnumValue("TIME_OF_LONGEST_CHANGE")]
            _TIME_OF_LONGEST_CHANGE,

            /// <summary>
            /// <para>Time of shortest change</para>
            /// <para>Time of shortest change—Each pixel will contain the date of change at the beginning or end of the shortest transition segment in the time series.</para>
            /// <para>最短更改时间—每个像素将包含时间序列中最短过渡段的开头或结尾处的更改日期。</para>
            /// </summary>
            [Description("Time of shortest change")]
            [GPEnumValue("TIME_OF_SHORTEST_CHANGE")]
            _TIME_OF_SHORTEST_CHANGE,

            /// <summary>
            /// <para>Time of fastest change</para>
            /// <para>Time of fastest change—Each pixel will contain the date of change at the beginning or end of the transition that occurred most quickly.</para>
            /// <para>最快更改时间 - 每个像素将包含最快发生的转换开始或结束时的更改日期。</para>
            /// </summary>
            [Description("Time of fastest change")]
            [GPEnumValue("TIME_OF_FASTEST_CHANGE")]
            _TIME_OF_FASTEST_CHANGE,

            /// <summary>
            /// <para>Time of slowest change</para>
            /// <para>Time of slowest change—Each pixel will contain the date of change at the beginning or end of the transition that occurred most slowly.</para>
            /// <para>最慢更改时间 - 每个像素将包含最慢的过渡开始或结束时的更改日期。</para>
            /// </summary>
            [Description("Time of slowest change")]
            [GPEnumValue("TIME_OF_SLOWEST_CHANGE")]
            _TIME_OF_SLOWEST_CHANGE,

        }

        /// <summary>
        /// <para>Maximum Number of Changes</para>
        /// <para><xdoc>
        ///   <para>The maximum number of changes per pixel that will be calculated. This number corresponds to the number of bands in the output raster. The default is 1, meaning only one change date will be calculated, and the output raster will contain only one band.</para>
        ///   <para>This parameter is not active when the Change Type parameter is set to Number of changes.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>将计算的每个像素的最大更改数。此数字对应于输出栅格中的波段数。默认值为 1，表示将仅计算一个更改日期，并且输出栅格将仅包含一个波段。</para>
        ///   <para>当“更改类型”参数设置为“更改数”时，此参数处于非活动状态。</para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Maximum Number of Changes")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public long _max_number_changes { get; set; } = 1;


        /// <summary>
        /// <para>Segment Date</para>
        /// <para><xdoc>
        ///   <para>Specifies whether the date at the beginning of a change segment will be extracted or at the end.</para>
        ///   <para>This parameter is available only when the input change analysis raster is the output from the Analyze Changes Using LandTrendr tool.</para>
        ///   <bulletList>
        ///     <bullet_item>Beginning of segment—The date at the beginning of a change segment will be extracted. This is the default.</bullet_item><para/>
        ///     <bullet_item>End of segment—The date at the end of a change segment will be extracted.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定是提取更改段开头的日期还是提取结尾的日期。</para>
        ///   <para>仅当输入变化分析栅格为使用 LandTrendr 分析变化工具的输出时，此参数才可用。</para>
        ///   <bulletList>
        ///     <bullet_item>线段的开头 - 将提取更改线段开头的日期。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>线段结束—将提取更改线段结束时的日期。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Segment Date")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _segment_date_value _segment_date { get; set; } = _segment_date_value._BEGINNING_OF_SEGMENT;

        public enum _segment_date_value
        {
            /// <summary>
            /// <para>Beginning of segment</para>
            /// <para>Beginning of segment—The date at the beginning of a change segment will be extracted. This is the default.</para>
            /// <para>线段的开头 - 将提取更改线段开头的日期。这是默认设置。</para>
            /// </summary>
            [Description("Beginning of segment")]
            [GPEnumValue("BEGINNING_OF_SEGMENT")]
            _BEGINNING_OF_SEGMENT,

            /// <summary>
            /// <para>End of segment</para>
            /// <para>End of segment—The date at the end of a change segment will be extracted.</para>
            /// <para>线段结束—将提取更改线段结束时的日期。</para>
            /// </summary>
            [Description("End of segment")]
            [GPEnumValue("END_OF_SEGMENT")]
            _END_OF_SEGMENT,

        }

        /// <summary>
        /// <para>Change Direction</para>
        /// <para><xdoc>
        ///   <para>Specifies the direction of change that will be included in the analysis.</para>
        ///   <para>This parameter is available only when the input change analysis raster is the output from the Analyze Changes Using LandTrendr tool.</para>
        ///   <bulletList>
        ///     <bullet_item>All directions—All change directions will be included in the output. This is the default.</bullet_item><para/>
        ///     <bullet_item>Increasing—Only change in the positive or increasing direction will be included in the output.</bullet_item><para/>
        ///     <bullet_item>Decreasing—Only change in the negative or decreasing direction will be included in the output.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定将包含在分析中的更改方向。</para>
        ///   <para>仅当输入变化分析栅格为使用 LandTrendr 分析变化工具的输出时，此参数才可用。</para>
        ///   <bulletList>
        ///     <bullet_item>所有方向—所有更改方向都将包含在输出中。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>递增—输出中仅包括正方向或递增方向的变化。</bullet_item><para/>
        ///     <bullet_item>递减—输出中仅包括负方向或递减方向的变化。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Change Direction")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _change_direction_value _change_direction { get; set; } = _change_direction_value._ALL;

        public enum _change_direction_value
        {
            /// <summary>
            /// <para>All directions</para>
            /// <para>All directions—All change directions will be included in the output. This is the default.</para>
            /// <para>所有方向—所有更改方向都将包含在输出中。这是默认设置。</para>
            /// </summary>
            [Description("All directions")]
            [GPEnumValue("ALL")]
            _ALL,

            /// <summary>
            /// <para>Increasing</para>
            /// <para>Increasing—Only change in the positive or increasing direction will be included in the output.</para>
            /// <para>递增—输出中仅包括正方向或递增方向的变化。</para>
            /// </summary>
            [Description("Increasing")]
            [GPEnumValue("INCREASE")]
            _INCREASE,

            /// <summary>
            /// <para>Decreasing</para>
            /// <para>Decreasing—Only change in the negative or decreasing direction will be included in the output.</para>
            /// <para>递减—输出中仅包括负方向或递减方向的变化。</para>
            /// </summary>
            [Description("Decreasing")]
            [GPEnumValue("DECREASE")]
            _DECREASE,

        }

        /// <summary>
        /// <para>Filter by Year</para>
        /// <para><xdoc>
        ///   <para>Specifies whether the output will be filtered by a range of years.
        ///   <bulletList>
        ///     <bullet_item>Checked—Results will be filtered so that only changes that occurred within a specific range of years will be included in the output.  </bullet_item><para/>
        ///     <bullet_item>Unchecked—Results will not be filtered by year. This is the default.  </bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        /// </xdoc></para>
        /// <para><xdoc>
        /// <para>指定是否按年份范围筛选输出。
        ///   <bulletList>
        ///     <bullet_item>选中 - 将对结果进行过滤，以便仅将特定年份范围内发生的更改包含在输出中。</bullet_item><para/>
        ///     <bullet_item>未选中 - 结果将不按年份过滤。这是默认设置。 </bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Filter by Year")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _filter_by_year_value _filter_by_year { get; set; } = _filter_by_year_value._false;

        public enum _filter_by_year_value
        {
            /// <summary>
            /// <para>FILTER_BY_YEAR</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("FILTER_BY_YEAR")]
            [GPEnumValue("true")]
            _true,

            /// <summary>
            /// <para>NO_FILTER_BY_YEAR</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("NO_FILTER_BY_YEAR")]
            [GPEnumValue("false")]
            _false,

        }

        /// <summary>
        /// <para>Minimum Value</para>
        /// <para>The earliest year that will be used to filter results. This parameter is required if the Filter by Year parameter is checked.</para>
        /// <para>将用于筛选结果的最早年份。如果选中了按年份筛选参数，则此参数是必需的。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Minimum Value")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public long? _min_year { get; set; } = null;


        /// <summary>
        /// <para>Maximum Value</para>
        /// <para><xdoc>
        ///   <para>The latest year that will be used to filter results.</para>
        ///   <para>This parameter is required if the Filter by Year parameter is checked.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>将用于筛选结果的最近一年。</para>
        ///   <para>如果选中了按年份筛选参数，则此参数是必需的。</para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Maximum Value")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public long? _max_year { get; set; } = null;


        /// <summary>
        /// <para>Filter by Duration</para>
        /// <para><xdoc>
        ///   <para>Specifies whether results will be filtered by the change duration.</para>
        ///   <para>This parameter is active only when the input change analysis raster is the output from the Analyze Changes Using LandTrendr tool.
        ///   <bulletList>
        ///     <bullet_item>Checked—Results will be filtered by duration so that only the changes that lasted a given amount of time will be included in the output.  </bullet_item><para/>
        ///     <bullet_item>Unchecked—Results will not be filtered by duration. This is the default.  </bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定是否按更改持续时间筛选结果。</para>
        /// <para>仅当输入变化分析栅格为使用 LandTrendr 分析变化工具的输出时，此参数才处于活动状态。
        ///   <bulletList>
        ///     <bullet_item>选中 - 结果将按持续时间进行过滤，以便仅将持续给定时间的更改包含在输出中。</bullet_item><para/>
        ///     <bullet_item>未选中 - 不会按持续时间过滤结果。这是默认设置。 </bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Filter by Duration")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _filter_by_duration_value _filter_by_duration { get; set; } = _filter_by_duration_value._false;

        public enum _filter_by_duration_value
        {
            /// <summary>
            /// <para>FILTER_BY_DURATION</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("FILTER_BY_DURATION")]
            [GPEnumValue("true")]
            _true,

            /// <summary>
            /// <para>NO_FILTER_BY_DURATION</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("NO_FILTER_BY_DURATION")]
            [GPEnumValue("false")]
            _false,

        }

        /// <summary>
        /// <para>Minimum  Duration (in years)</para>
        /// <para><xdoc>
        ///   <para>The minimum number of consecutive years that will be included in the results.</para>
        ///   <para>This parameter is required if the Filter by Duration parameter is checked.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>将包含在结果中的最小连续年数。</para>
        ///   <para>如果选中了“按持续时间筛选”参数，则此参数是必需的。</para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Minimum  Duration (in years)")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public double? _min_duration { get; set; } = null;


        /// <summary>
        /// <para>Maximum  Duration (in years)</para>
        /// <para><xdoc>
        ///   <para>The maximum number of consecutive years that will be included in the results.</para>
        ///   <para>This parameter is required if the Filter by Duration parameter is checked.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>将包含在结果中的最大连续年数。</para>
        ///   <para>如果选中了“按持续时间筛选”参数，则此参数是必需的。</para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Maximum  Duration (in years)")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public double? _max_duration { get; set; } = null;


        /// <summary>
        /// <para>Filter by Magnitude</para>
        /// <para><xdoc>
        ///   <para>Specifies whether results will be filtered by change magnitude.
        ///   <bulletList>
        ///     <bullet_item>Checked—Results will be filtered by magnitude so that only the changes of a given magnitude will be included in the output.  </bullet_item><para/>
        ///     <bullet_item>Unchecked—Results will not be filtered by magnitude. This is the default.  </bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        ///   <para>Specifies whether results will be filtered by change magnitude.</para>
        ///   <bulletList>
        ///     <bullet_item>FILTER_BY_MAGNITUDE—Results will be filtered by magnitude so that only the changes of a given magnitude will be included in the output.</bullet_item><para/>
        ///     <bullet_item>NO_FILTER_BY_MAGNITUDE—Results will not be filtered by magnitude. This is the default.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        /// <para>指定是否按更改幅度筛选结果。
        ///   <bulletList>
        ///     <bullet_item>选中 - 结果将按幅度进行过滤，以便输出中仅包含给定幅度的变化。</bullet_item><para/>
        ///     <bullet_item>未选中 - 结果将不按量级过滤。这是默认设置。 </bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        ///   <para>指定是否按更改幅度筛选结果。</para>
        ///   <bulletList>
        ///     <bullet_item>FILTER_BY_MAGNITUDE—结果将按幅度进行过滤，以便输出中仅包含给定幅度的变化。</bullet_item><para/>
        ///     <bullet_item>NO_FILTER_BY_MAGNITUDE - 结果将不按量级过滤。这是默认设置。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Filter by Magnitude")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _filter_by_magnitude_value _filter_by_magnitude { get; set; } = _filter_by_magnitude_value._false;

        public enum _filter_by_magnitude_value
        {
            /// <summary>
            /// <para>FILTER_BY_MAGNITUDE</para>
            /// <para>FILTER_BY_MAGNITUDE—Results will be filtered by magnitude so that only the changes of a given magnitude will be included in the output.</para>
            /// <para>FILTER_BY_MAGNITUDE—结果将按幅度进行过滤，以便输出中仅包含给定幅度的变化。</para>
            /// </summary>
            [Description("FILTER_BY_MAGNITUDE")]
            [GPEnumValue("true")]
            _true,

            /// <summary>
            /// <para>NO_FILTER_BY_MAGNITUDE</para>
            /// <para>NO_FILTER_BY_MAGNITUDE—Results will not be filtered by magnitude. This is the default.</para>
            /// <para>NO_FILTER_BY_MAGNITUDE - 结果将不按量级过滤。这是默认设置。</para>
            /// </summary>
            [Description("NO_FILTER_BY_MAGNITUDE")]
            [GPEnumValue("false")]
            _false,

        }

        /// <summary>
        /// <para>Minimum  Magnitude</para>
        /// <para><xdoc>
        ///   <para>The minimum magnitude that will be included in the results.</para>
        ///   <para>This parameter is required if the Filter by Magnitude parameter is checked.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>将包含在结果中的最小量级。</para>
        ///   <para>如果选中了按幅度过滤参数，则此参数是必需的。</para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Minimum  Magnitude")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public double? _min_magnitude { get; set; } = null;


        /// <summary>
        /// <para>Maximum  Magnitude</para>
        /// <para><xdoc>
        ///   <para>The maximum magnitude that will be included in the results.</para>
        ///   <para>This parameter is required if the Filter by Duration parameter is checked.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>结果中将包含的最大量级。</para>
        ///   <para>如果选中了“按持续时间筛选”参数，则此参数是必需的。</para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Maximum  Magnitude")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public double? _max_magnitude { get; set; } = null;


        /// <summary>
        /// <para>Filter by Start Value</para>
        /// <para><xdoc>
        ///   <para>Specifies whether results will be filtered by start value.</para>
        ///   <para>This parameter is active only when the input change analysis raster is the output from the Analyze Changes Using LandTrendr tool.
        ///   <bulletList>
        ///     <bullet_item>Checked—Results will be filtered by start value so that only the changes of a given start value will be included in the output.  </bullet_item><para/>
        ///     <bullet_item>Unchecked—Results will not be filtered by start value. This is the default.  </bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定是否按起始值筛选结果。</para>
        /// <para>仅当输入变化分析栅格为使用 LandTrendr 分析变化工具的输出时，此参数才处于活动状态。
        ///   <bulletList>
        ///     <bullet_item>选中 - 结果将按起始值进行过滤，以便输出中仅包含给定起始值的更改。</bullet_item><para/>
        ///     <bullet_item>未选中 - 结果将不按起始值进行过滤。这是默认设置。 </bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Filter by Start Value")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _filter_by_start_value_value _filter_by_start_value { get; set; } = _filter_by_start_value_value._false;

        public enum _filter_by_start_value_value
        {
            /// <summary>
            /// <para>FILTER_BY_START_VALUE</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("FILTER_BY_START_VALUE")]
            [GPEnumValue("true")]
            _true,

            /// <summary>
            /// <para>NO_FILTER_BY_START_VALUE</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("NO_FILTER_BY_START_VALUE")]
            [GPEnumValue("false")]
            _false,

        }

        /// <summary>
        /// <para>Minimum  Start Value</para>
        /// <para><xdoc>
        ///   <para>The minimum start value that will be included in the results.</para>
        ///   <para>This parameter is required if the Filter by Start Value parameter is checked.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>将包含在结果中的最小起始值。</para>
        ///   <para>如果选中了“按起始值筛选”参数，则此参数是必需的。</para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Minimum  Start Value")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public double? _min_start_value { get; set; } = null;


        /// <summary>
        /// <para>Maximum  Start Value</para>
        /// <para><xdoc>
        ///   <para>The maximum start value that will be included in the results.</para>
        ///   <para>This parameter is required if the Filter by Start Value parameter is checked.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>将包含在结果中的最大起始值。</para>
        ///   <para>如果选中了“按起始值筛选”参数，则此参数是必需的。</para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Maximum  Start Value")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public double? _max_start_value { get; set; } = null;


        /// <summary>
        /// <para>Filter by End Value</para>
        /// <para><xdoc>
        ///   <para>Specifies whether results will be filtered by end value.</para>
        ///   <para>This parameter is active only when the input change analysis raster is the output from the Analyze Changes Using LandTrendr tool.
        ///   <bulletList>
        ///     <bullet_item>Checked—Results will be filtered by end value so that only the changes of a given end value will be included in the output.  </bullet_item><para/>
        ///     <bullet_item>Unchecked—Results will not be filtered by end value. This is the default.  </bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定是否按结束值筛选结果。</para>
        /// <para>仅当输入变化分析栅格为使用 LandTrendr 分析变化工具的输出时，此参数才处于活动状态。
        ///   <bulletList>
        ///     <bullet_item>选中 - 结果将按结束值进行过滤，以便输出中仅包含给定结束值的更改。</bullet_item><para/>
        ///     <bullet_item>未选中 - 结果将不按结束值进行过滤。这是默认设置。 </bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Filter by End Value")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _filter_by_end_value_value _filter_by_end_value { get; set; } = _filter_by_end_value_value._false;

        public enum _filter_by_end_value_value
        {
            /// <summary>
            /// <para>FILTER_BY_END_VALUE</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("FILTER_BY_END_VALUE")]
            [GPEnumValue("true")]
            _true,

            /// <summary>
            /// <para>NO_FILTER_BY_END_VALUE</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("NO_FILTER_BY_END_VALUE")]
            [GPEnumValue("false")]
            _false,

        }

        /// <summary>
        /// <para>Minimum  End Value</para>
        /// <para><xdoc>
        ///   <para>The minimum end value that will be included in the results.</para>
        ///   <para>This parameter is required if the Filter by End Value parameter is checked.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>将包含在结果中的最小最终值。</para>
        ///   <para>如果选中了按最终值筛选参数，则此参数是必需的。</para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Minimum  End Value")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public double? _min_end_value { get; set; } = null;


        /// <summary>
        /// <para>Maximum  End Value</para>
        /// <para><xdoc>
        ///   <para>The maximum end value that will be included in the results.</para>
        ///   <para>This parameter is required if the Filter by End Value parameter is checked.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>将包含在结果中的最大最终值。</para>
        ///   <para>如果选中了按最终值筛选参数，则此参数是必需的。</para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Maximum  End Value")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public double? _max_end_value { get; set; } = null;


        public DetectChangeUsingChangeAnalysisRaster SetEnv(object cellSize = null, object compression = null, object configKeyword = null, object extent = null, object geographicTransformations = null, object nodata = null, object outputCoordinateSystem = null, object parallelProcessingFactor = null, object rasterStatistics = null, object resamplingMethod = null, object scratchWorkspace = null, object snapRaster = null, double[] tileSize = null, object workspace = null)
        {
            base.SetEnv(cellSize: cellSize, compression: compression, configKeyword: configKeyword, extent: extent, geographicTransformations: geographicTransformations, nodata: nodata, outputCoordinateSystem: outputCoordinateSystem, parallelProcessingFactor: parallelProcessingFactor, rasterStatistics: rasterStatistics, resamplingMethod: resamplingMethod, scratchWorkspace: scratchWorkspace, snapRaster: snapRaster, tileSize: tileSize, workspace: workspace);
            return this;
        }

    }

}